

#include <tenacitas_distributed/call_center.h>

namespace tenacitas {

    namespace tenacitas_distributed_test {

        class network ;        
        class network_timeout ;
        class address ;
        class on_hold_calls ;
        class message_cipher ;
        class message_coder ;
        class message ;
        class agent_allocator ;
        class agent ;
        class agent_timeout ;
        class call_recorder  ;
                
        class network_timeout {
        public:
            typedef network_timeout * ptr_type;
            void start( ) {}
            void stop( ) {}
        };


        class address {};


        class network {
        public:
            void start( const address & p_address,
                        network_timeout::ptr_type p_network_timeout ) {}

            void stop( ){}

            call<address> wait( ) {
                address l_caller;
                
                return call<address>( l_caller );
            }
        };

        class on_hold_calls {
        public:
            typedef on_hold_calls * ptr_type;
            void start( ){}
            void stop( ) {}
        };

        class message_cipher {
        public:
            typedef message_cipher * ptr_type;
            void start( ){}
            void stop( ) {}
        };

        class message_coder { 
        public:
            typedef message_cipher * ptr_type;
            void start( ){}
            void stop( ) {}
        };

        class message {};

        class agent_allocator {
        public:
            typedef agent_allocator * ptr_type;
            void start( ){}
            void stop( ) {}
        };
        

        class agent {};

        class agent_timeout {};

        class call_recorder  {};

        typedef distributed::call_center<network,
                                         network_timeout,
                                         address,
                                         on_hold_calls,
                                         message_cipher,
                                         message_coder,
                                         message,
                                         agent_allocator,
                                         agent,
                                         agent_timeout,
                                         call_recorder> call_center_test;
    }
}


int main( ) {
    using namespace tenacitas::tenacitas_distributed_test;

    network l_network;
    
    network_timeout l_network_timeout;

    address l_address;

    on_hold_calls l_on_hold_calls;
    
    message_cipher l_message_cipher;
    
    message_coder l_message_coder;
    
    message l_message;
    
    agent_allocator l_agent_allocator ;
    
    agent_timeout l_agent_timeout;
    
    call_recorder l_call_recorder;
    

    call_center_test l_call_center( );

}
